package be.ipl.diavoloz.daoimpl;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.ejb.Stateless;

import be.ipl.diavoloz.dao.PartieDao;
import be.ipl.diavoloz.modele.Demons;
import be.ipl.diavoloz.modele.Joueur;
import be.ipl.diavoloz.modele.Partie;
import be.ipl.diavoloz.modele.Partie.Etat;


@SuppressWarnings("serial")
@Stateless
public class PartieDaoImpl extends DaoImpl<Integer, Partie> implements PartieDao{

	@Override
	public Partie rechercherPartirePar(int id) {
		String queryString = "SELECT p from Partie p where p.id = ?1";
		return recherche(queryString, id);
	}

	@Override
	public List<Partie> listerPartiesEnAttente() {
		return liste("SELECT p from Partie p where p.etat=?1", Etat.ATTENTE_JOUEURS);
	}

	@Override
	public List<Partie> listerPartiesTerminees() {
		return liste("SELECT p from Partie p where p.etat = ?1", Etat.TERMINEE);
	}

	@Override
	public Partie rechercherPartireNom(String nom) {
		String queryString = "SELECT p from Partie p where p.nom = ?1";
		return recherche(queryString, nom);
	}
	
	@Override
	public boolean containsPartie(String nom) {
		String queryString = "SELECT p from Partie p where p.nom = ?1";
		Partie p = recherche(queryString, nom);
		return p!=null;
	}
	
	@Override
	public int pointDUnJoueur(Joueur joueur, Partie p){
		Partie partie = recharger(p.getId());
		return partie.getMesPoints().get(joueur);
	}
	
	@Override
	public List<Joueur> rechercherListeJoueur(Partie p){
		Partie partie = recharger(p.getId());
		return partie.getListeJoueurs();
	}
	
	@Override
	public Map<Joueur, Integer> rechercherListePoints(int idPartie){
		Partie partie = recharger(idPartie);
		return partie.getMesPoints();
	}


	@Override
	public void supprimerTable() {
		String queryString = "SELECT p from Partie";
		List<Partie> l = liste(queryString, null);
		Iterator<Partie> it = l.iterator();
		while(it.hasNext()){
			Partie d = (Partie) it.next();
			supprimer(d.getId());
		}	
	}
}
